4. Entraîner les réseaux profonds

La leçon 3 a choisi l'optimiseur. Cette leçon rassemble les trois outils qui font que cette optimisation se comporte bien sur une pile profonde : démarrer les poids à la bonne échelle (l'initialisation), garder les activations bien mises à l'échelle pendant qu'elles bougent (la normalisation), et empêcher le réseau de mémoriser le jeu d'entraînement (la régularisation). Chacun mériterait son propre chapitre. Ici, nous gardons ce qui compte le plus en pratique.

4.1 L'initialisation

Briser la symétrie. Poser \(W^{[l]} = 0\), ou toute valeur qui rend identiques toutes les unités d'une couche, casse l'apprentissage : deux unités avec les mêmes poids et la même entrée calculent la même activation, reçoivent le même gradient et restent identiques pour toujours. La couche se comporte comme une seule unité, quelle que soit sa largeur. Les poids démarrent donc aléatoires. Les biais peuvent démarrer à zéro : les poids aléatoires diffèrent déjà, et un biais nul garde chaque unité dans la région réactive de son activation.

Choisir la bonne échelle. Pour une unité \(z = \sum_{j=1}^{n_{\text{in}}} W_j a_j\) à poids et entrées indépendants et centrés, la variance est une somme de \(n_{\text{in}}\) termes :

\[\boxed{ \operatorname{Var}(z) = n_{\text{in}} \cdot \operatorname{Var}(W) \cdot \operatorname{Var}(a) }\]

Si \(n_{\text{in}} \operatorname{Var}(W)\) glisse sous \(1\), le signal rétrécit couche après couche, et la leçon 2 a prouvé où cela finit : un gradient disparu. Au-dessus de \(1\), il explose. Le remède est de tenir \(n_{\text{in}} \operatorname{Var}(W) \approx 1\), ce qui fixe la variance des poids à la taille de la couche :

\[\boxed{ \text{Xavier : } \operatorname{Var}(W^{[l]}) = \frac{2}{n_{\text{in}} + n_{\text{out}}}, \qquad \text{He : } \operatorname{Var}(W^{[l]}) = \frac{2}{n_{\text{in}}} }\]

Xavier (qui équilibre les passes avant et arrière) convient à \(\tanh\) et à la sigmoïde. He double la variance parce que ReLU met à zéro la moitié de ses entrées en moyenne, c'est donc la bonne cible pour la famille ReLU.

Amplitude du gradient selon la profondeur pour des gains par couche trop petits, stables ou trop grands

Amplitude du gradient selon la profondeur : des poids mal mis à l'échelle le font disparaître ou exploser, tandis qu'une initialisation qui préserve la variance le garde proche de un.

Écrêter ce qui explose encore. L'initialisation règle l'échelle une seule fois, au pas zéro. Si les gradients explosent encore pendant l'entraînement (fréquent dans les réseaux récurrents, leçon 7), on remet le gradient à l'échelle pour que sa norme ne dépasse jamais un seuil \(\tau\), en gardant sa direction :

\[\boxed{ g \leftarrow g \cdot \min\!\left(1, \frac{\tau}{\lVert g \rVert}\right) }\]

4.2 La normalisation

L'initialisation ne positionne le réseau qu'au pas zéro : à mesure que l'entraînement déplace les poids, la distribution de l'entrée de chaque couche dérive, et les couches suivantes poursuivent une cible mouvante. Une couche de normalisation fixe les statistiques à la volée : standardiser, puis laisser le réseau réapprendre son échelle. Pour une caractéristique \(x\) sur un mini-lot de taille \(m\), la normalisation par lot calcule

\[\boxed{ \mu_\mathcal{B} = \frac{1}{m}\sum_{i=1}^{m} x^{(i)}, \qquad \sigma_\mathcal{B}^2 = \frac{1}{m}\sum_{i=1}^{m}\left(x^{(i)} - \mu_\mathcal{B}\right)^2 }\] \[\boxed{ \hat{x}^{(i)} = \frac{x^{(i)} - \mu_\mathcal{B}}{\sqrt{\sigma_\mathcal{B}^2 + \epsilon}}, \qquad y^{(i)} = \gamma\, \hat{x}^{(i)} + \beta }\]

L'échelle \(\gamma\) et le décalage \(\beta\) s'apprennent comme n'importe quel poids, la normalisation ne retire donc aucune capacité : le réseau peut même apprendre à l'annuler. Le gain : une surface de perte plus lisse, des taux d'apprentissage utilisables plus élevés, moins de sensibilité à l'initialisation. Deux conséquences pratiques : à l'inférence, où il n'y a pas de lot, la BatchNorm bascule sur des moyennes glissantes de \(\mu\) et \(\sigma^2\) accumulées pendant l'entraînement (oublier cette bascule est le bug BatchNorm classique), et le décalage \(\beta\) rend le biais de couche \(b^{[l]}\) redondant.

La normalisation par couche garde la même recette standardiser, mettre à l'échelle, décaler, mais moyenne sur les caractéristiques d'un seul exemple au lieu du lot. Ses statistiques ne dépendent plus du lot, elle se comporte donc à l'identique à l'entraînement et à l'inférence et gère les séquences de longueur variable, ce qui en fait le choix des réseaux récurrents et des Transformers (leçon 10).

Aspect Normalisation par lot Normalisation par couche
Axe de normalisation à travers le lot, par caractéristique à travers les caractéristiques, par exemple
Entraînement vs inférence statistiques de lot vs statistiques glissantes identiques dans les deux
Usage typique CNN et modèles de vision RNN et Transformers

Axes de la normalisation par lot et par couche sur une grille lot par caractéristiques

La normalisation par lot calcule ses statistiques le long d'une colonne de caractéristique à travers le lot, la normalisation par couche à travers les caractéristiques d'un seul exemple.

4.3 La régularisation et le dropout

Un réseau profond a généralement plus de paramètres que d'exemples d'entraînement, il peut donc mémoriser le jeu d'entraînement, bruit compris. La régularisation échange un peu de précision d'entraînement contre de la généralisation, l'histoire biais-variance de Concepts généraux.

La décroissance des poids (\(L_2\)). Ajouter au coût une pénalité sur les poids au carré, de force \(\lambda\) :

\[\boxed{ J_{\text{reg}} = J + \frac{\lambda}{2}\sum_{l=1}^{L}\lVert W^{[l]} \rVert_F^2 \quad\Longrightarrow\quad W^{[l]} \leftarrow (1 - \alpha\lambda)\, W^{[l]} - \alpha\,\frac{\partial J}{\partial W^{[l]}} }\]

Le facteur \((1 - \alpha\lambda)\) rétrécit chaque poids à chaque pas, d'où le nom. Sa cousine \(L_1\) pénalise les valeurs absolues et pousse beaucoup de poids exactement à zéro. Les biais restent hors de la pénalité.

Le dropout. À chaque passe d'entraînement, garder chaque unité avec probabilité \(p\) et la mettre à zéro sinon, puis diviser par \(p\) pour que le signal attendu reste inchangé :

\[\boxed{ \tilde{a}^{[l]} = \frac{m \odot a^{[l]}}{p}, \qquad m_i \sim \text{Bernoulli}(p) }\]

Aucune unité ne peut compter sur ses voisines, la représentation s'étale donc. Chaque pas entraîne l'un des \(2^k\) sous-réseaux amincis qui partagent leurs poids, et l'inférence, dropout éteint, approche gratuitement leur prédiction moyenne (c'est ce que le \(1/p\) achète). Probabilités de conservation typiques : environ \(0{,}8\) en entrée, \(0{,}5\) dans les couches cachées.

Réseau complet à côté d'un sous-réseau aminci où deux unités sont supprimées

Le dropout entraîne à chaque pas un sous-réseau aminci différent en retirant des unités au hasard, et les moyenne à l'inférence.

Initialisé à la bonne échelle, normalisé en vol et régularisé contre la mémorisation, le réseau est prêt pour l'architecture. La prochaine leçon construit le réseau convolutif, dont le partage de poids est lui-même une forme de régularisation.


Suivant : Réseaux convolutifs · Vue d'ensemble du cours

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9